In a networked storage environment, a network controller including a networked storage adapter or a host bus adapter (HBA) on a host computer, such as an Ethernet controller, Fibre Channel controller, etc., will receive Input/Output (I/O) requests or responses to I/O requests directed between an initiator and a target. Often, the host computer operating system includes a device driver to communicate with the network controller hardware to manage I/O requests to transmit and receive over a network. The host computer may also implement a protocol which packages data to be transmitted over the network into packets, each of which contains a destination address as well as a portion of the data to be transmitted. A transport protocol layer can process the packets received by the network controller, and accesses any I/O commands or data embedded in the packet.
For instance, the computer may implement the Transmission Control Protocol (TCP) and Internet Protocol (IP) to encode and address data for transmission, and to decode and access the payload data in the TCP/IP packets received at the network controller. IP specifies the format of packets, also called datagrams, and the addressing scheme. TCP is a higher level protocol which establishes a connection between a destination and a source.
FIG. 1 shows an example of a stack 10 of interface layers, one of which includes a “physical layer” 12 that handles bit-level transmission over physical media. A “link layer” 14 handles the low-level details of providing reliable data communication over physical connections. A “network layer” 16 implements a protocol such as the Internet Protocol, and can handle tasks involved in finding a path through a network that connects a source and destination. A “transport layer” 18 implements a transport protocol such as the TCP protocol, and coordinates communication between source and destination devices while insulating “application layer” programs from the complexity of network communication. Another interface layer 20 implements another high level protocol, the Internet Small Computer Systems Interface (iSCSI) protocol, which is designed to transport SCSI commands and data from a SCSI interface layer 22 over a network such as an IP network between an Initiator device, and a Target device.
The term “iSCSI” refers to the protocol defined and described by the IETF (Internet Engineering Task Force) standards body, and any variant of that protocol. One example of an iSCSI packet configuration comprises an Ethernet package encapsulating an Internet Protocol (IP) and Transmission Control Protocol (TCP) package layers, which further encapsulate one or more iSCSI packages or a partial iSCSI package, that includes one or more SCSI commands or other iSCSI payload. In network data transmission operations, an initiator device transmits data or commands over the network to a target device. The TCP/IP package includes error detection code such as checksum code, to determine whether the transmitted packet has changed during the transmission as the packet passes through switches and routers. Both an initiator of such an iSCSI command and the target generally can accommodate the Ethernet, TCP/IP, and iSCSI protocols when processing each part of the transmitted packet. The target device, upon receiving the packet, will use the Ethernet protocol to access the TCP/IP package, the TCP/IP protocol to access the iSCSI package, and iSCSI protocol to access the SCSI commands or data within the iSCSI package.
In a known stack such as the stack 10, the iSCSI session and the transport/network connections are managed by an iSCSI session/connection management portion 24 of the iSCSI layer 20. A SCSI command directed to an iSCSI target, may be issued by the initiator of the host computer. This initiator SCSI command is processed by a SCSI command processing portion 26 of the iSCSI layer 20.
A data transfer operation may be performed in accordance with the iSCSI protocol by the SCSI command processing portion 26, together with an iSCSI request/response processing portion 28 of the iSCSI layer 20. Commands, status information, acknowledgments, responses, requests and data including read data and write data may be encapsulated for transmission in a Protocol Data Unit (PDU), or if received, unpacked from a Protocol Data Unit, by an iSCSI PDU generation/reception processing portion 30 of the iSCSI layer 20. If errors occur during the data transfer operation, such errors may handled by an iSCSI error handling recovery portion 32 of the iSCSI layer 20.
Protocol layers such as the transport layer can be performed substantially entirely by host software such as the network controller driver, an application or the operating system. Similarly, protocol layers such as the iSCSI layer can be performed substantially entirely by host software such as a driver for a network controller often referred to as a host bus adapter, as well as an application or the operating system. However, software such as a driver for a controller, can utilize significant host processor resources to handle network transmission requests to the network controller. One technique to reduce the load on the host processor is the use of an offload engine such as an iSCSI offload engine and a TCP/IP Offload Engine (TOE) in which protocol related operations such as the iSCSI protocol and the TCP/IP protocols are implemented substantially entirely in the network controller hardware as opposed to the device driver or other host software, thereby saving the host processor from having to perform the iSCSI and TCP/IP protocol related operations. For example, each of the protocol layers 12-20 of the stack 10 may be implemented in a network controller having offload engines. In addition, to conserving host processor resources, interrupt handling by the host processor may be reduced as well.
In another approach, the offload engine may perform some but not all iSCSI protocol related tasks. For example, the Intel PRO/1000 T IP Storage Adapter, can perform error checking of an encapsulated iSCSI packet using the iSCSI error checking codes, before the iSCSI packets are forwarded elsewhere for extraction and processing of the SCSI commands or data.